package pos.dato;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import pos.dato.ConnectionManager;
import pos.dominios.Etiqueta;
import pos.dominios.Propuesta;
import pos.dominios.Usuario;


public class JDBCPropuestaDAO implements IPropuestaDAO {
    
	private Connection conn;
    IComentarioDAO cdao;
    IEtiquetaDAO edao;
    IUsuarioDAO udao;

    public JDBCPropuestaDAO() {
        conn = ConnectionManager.getInstance().checkOut();
        edao = new JDBCEtiquetaDAO();
        udao = new JDBCUsuarioDAO();
    }
   
    public Propuesta selectPropuesta(String propuestaID) {
        PreparedStatement stmt = null;
        ResultSet result = null;
        Propuesta p = new Propuesta();   
       
	    try {
	    	String sql = "SELECT * FROM Propuestas WHERE (propuestaID = ?) ";
	        stmt = conn.prepareStatement(sql);
	        stmt.setString(1, propuestaID);
	        result = stmt.executeQuery();
	        result.next();
	        p.setTitulo(result.getString("titulo"));
	        p.setFecha(result.getDate("fecha"));
	        p.setDescripcion(result.getString("descripcion"));
	        p.setPropuestaID(result.getString("propuestaID"));
	        p.setVoto(result.getInt("voto"));
	        p.setModerada(result.getBoolean("moderada"));
	        Usuario u = udao.select(conn, result.getString("usuarioID"));
	        p.setUsuario(u);
	        Etiqueta e = edao.select(conn, result.getString("etiquetaID"));
	        p.setEtiqueta(e);
	                   
	            
	    } catch (SQLException e) {
	        System.out.println("Message: " + e.getMessage());
	        System.out.println("SQLState: " + e.getSQLState());
	        System.out.println("ErrorCode: " + e.getErrorCode());
	        } finally {
	        	 ConnectionManager.getInstance().checkIn(conn);
	            try {
	                if (result != null) {
	                    result.close();
	                }
	                if (stmt != null) {
	                    stmt.close();
	                }
	            } catch (SQLException e){} 
	        }
    
	      return p ;
    }
  
    public List<Propuesta> selectAllPropuestas() {
        PreparedStatement stmt = null;
        ResultSet result = null;
        List<Propuesta> lo = new LinkedList<Propuesta>();
        String sql = "SELECT * FROM Propuestas ORDER BY fecha";

    try {
        stmt = conn.prepareStatement(sql);
        result = stmt.executeQuery();
        while (result.next()) {
            Propuesta p = new Propuesta();
            p.setPropuestaID(result.getString("propuestaID"));
            p.setTitulo(result.getString("titulo"));
            p.setFecha(result.getDate("fecha"));
            p.setDescripcion(result.getString("descripcion"));
            p.setVoto(result.getInt("voto"));
            p.setModerada(result.getBoolean("moderada"));
            Usuario u = udao.select(conn, result.getString("usuarioID"));
            p.setUsuario(u);
            Etiqueta e = edao.select(conn, result.getString("etiquetaID"));
            p.setEtiqueta(e);
            lo.add(p);
        }
    } catch (SQLException e) {
        System.out.println("Message: " + e.getMessage());
        System.out.println("SQLState: " + e.getSQLState());
        System.out.println("ErrorCode: " + e.getErrorCode());
        } finally {
        	ConnectionManager.getInstance().checkIn(conn);
            try {
                if (result != null) {
                    result.close();
                }
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
            }
        }
        return lo;
    }
    
    
    public List<Propuesta> selectAllPropuestasEtiqueta(String etiquetaID) {
        PreparedStatement stmt = null;
        ResultSet result = null;
        List<Propuesta> lo = new LinkedList<Propuesta>();
        String sql = "SELECT * FROM Propuestas WHERE (etiquetaID=?) ORDER BY fecha";

    try {
        stmt = conn.prepareStatement(sql);
        stmt.setString(1, etiquetaID);
        result = stmt.executeQuery();
        while (result.next()) {
            Propuesta p = new Propuesta();
            p.setPropuestaID(result.getString("propuestaID"));
            p.setTitulo(result.getString("titulo"));
            p.setFecha(result.getDate("fecha"));
            p.setDescripcion(result.getString("descripcion"));
            p.setVoto(result.getInt("voto"));
            p.setModerada(result.getBoolean("moderada"));
            Usuario u = udao.select(conn, result.getString("usuarioID"));
            p.setUsuario(u);
            Etiqueta e = edao.select(conn, result.getString("etiquetaID"));
            p.setEtiqueta(e);
            lo.add(p);
        }
    } catch (SQLException e) {
        System.out.println("Message: " + e.getMessage());
        System.out.println("SQLState: " + e.getSQLState());
        System.out.println("ErrorCode: " + e.getErrorCode());
        } finally {
        	ConnectionManager.getInstance().checkIn(conn);
            try {
                if (result != null) {
                    result.close();
                }
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {}
        }
        return lo;
    } 
    
    public List<Propuesta> selectAllPropuestasAutor(String UsuarioID) {
        PreparedStatement stmt = null;
        ResultSet result = null;
        List<Propuesta> lo = new LinkedList<Propuesta>();
        String sql = "SELECT * FROM Propuestas WHERE (usuarioID=?) ORDER BY fecha";

    try {
        stmt = conn.prepareStatement(sql);
        stmt.setString(1, UsuarioID);
        result = stmt.executeQuery();

        while (result.next()) {
            Propuesta p = new Propuesta();
            p.setPropuestaID(result.getString("propuestaID"));
            p.setTitulo(result.getString("titulo"));
            p.setFecha(result.getDate("fecha"));
            p.setDescripcion(result.getString("descripcion"));
            
            p.setVoto(result.getInt("voto"));
            p.setModerada(result.getBoolean("moderada"));
            Usuario u = udao.select(conn, result.getString("usuarioID"));
            p.setUsuario(u);
            Etiqueta e = edao.select(conn, result.getString("etiquetaID"));
            p.setEtiqueta(e);
           


            lo.add(p);
        }
    } catch (SQLException e) {
        System.out.println("Message: " + e.getMessage());
        System.out.println("SQLState: " + e.getSQLState());
        System.out.println("ErrorCode: " + e.getErrorCode());
        } finally {
        	ConnectionManager.getInstance().checkIn(conn);
            try {
                if (result != null) {
                    result.close();
                }

                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
            }
        }

        return lo;
    }
    
    public void updateVoto( String propuestaID, Integer a){
    	PreparedStatement stmt = null;
    	Connection conn = ConnectionManager.getInstance().checkOut();
    	try {
    		String sql ="UPDATE Propuestas SET voto="+a+" WHERE propuestaID='"+propuestaID+"'";
    		System.out.println("La consulta en string es: "+sql);
            stmt = conn.prepareStatement(sql);
            int resultado = stmt.executeUpdate();
            System.out.println("El resultado de la consulta es:"+ resultado);
        } catch (SQLException e) {
            System.out.println("Message: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("ErrorCode: " + e.getErrorCode());
        } finally {
            try {
                if (stmt != null)
                    stmt.close();
            } catch (SQLException e) {
            }
        }
    }  
    
    public void updateModerada(String propuestaID){
    	PreparedStatement stmt = null;
    	Connection conn = ConnectionManager.getInstance().checkOut();
    	try {
    		String sql ="UPDATE Propuestas SET moderada='1' WHERE propuestaID='"+propuestaID+"'";
    		System.out.println("La consulta en string es: "+sql);
            stmt = conn.prepareStatement(sql);
            int resultado = stmt.executeUpdate();
            System.out.println("El resultado de la consulta es:"+ resultado);
        } catch (SQLException e) {
            System.out.println("Message: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("ErrorCode: " + e.getErrorCode());
        } finally {
            try {
                if (stmt != null)
                    stmt.close();
            } catch (SQLException e) {
            }
        }
    }  

    
    public void updatePropuestaModerada(Connection conn,String propuestaID) {
        PreparedStatement stmt = null;
        String sql = "UPDATE Propuestas SET moderada='1' WHERE (propuestaID = ?)";

	    try {
	        stmt = conn.prepareStatement(sql);
	        stmt.setString(1, propuestaID);
	        stmt.executeUpdate();
	
	   
	    } catch (SQLException e) {
	        System.err.println("Message: " + e.getMessage());
	        System.err.println("SQLState: " + e.getSQLState());
	        System.err.println("ErrorCode: " + e.getErrorCode());
	    } finally {
	    	ConnectionManager.getInstance().checkIn(conn);
	        try {
	            if (stmt != null)
	                stmt.close();
	        } catch (SQLException e) {}
        }
    }
    
    
}
